package com.lazily.stringbulder_;


/**
 * @Author:  GZQ
 * @date:  2025/3/15 21:37
 * @description: String、StringBuffer 和 StringBuilder 的效率测试
 */

public class StringVsStringBufferVsStringBuilder {
	// 程序入口
	public static void main(String[] args) {

		long startTime = 0L;
		long endTime = 0L;
		StringBuffer buffer = new StringBuffer("");
		startTime = System.currentTimeMillis();
		for (int i = 0; i < 20000; i++) {//StringBuffer 拼接 20000 次
			buffer.append(String.valueOf(i));
		}
		endTime = System.currentTimeMillis();
		System.out.println("StringBuffer 的执行时间：" + (endTime - startTime));


		StringBuilder builder = new StringBuilder("");
		startTime = System.currentTimeMillis();
		for (int i = 0; i < 20000; i++) {//StringBuilder 拼接 20000 次
			builder.append(String.valueOf(i));
		}
		endTime = System.currentTimeMillis();
		System.out.println("StringBuilder 的执行时间：" + (endTime - startTime));


		String text = "";
		startTime = System.currentTimeMillis();
		for (int i = 0; i < 20000; i++) {//String 拼接 20000
			text = text + i;
		}
		endTime = System.currentTimeMillis();
		System.out.println("String 的执行时间：" + (endTime - startTime));


		// 总结:
		/*
			String、StringBuffer和 StringBuilder的选择
			使用的原则、结论：
				1.如果字符串存在大量的修改操作，一般使用StringBuffer或StringBuilder
				2.如果字符串存在大量的修改操作，并在单线程的情况，使用StringBuilder
				3.如果字符串存在大量的修改操作，并在多线程的情况，使用StringBuffer
				4.如果我们字符串很少修改，被多个对象引用，使用String，比如配置信息等

			StringBuilder的方法使用和StringBuffer一样，不再说.
		 */

	}
}
